package com.eeo.nana_sun_test_demo;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.text.method.PasswordTransformationMethod;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

//┏┓　　　┏┓
//┏┛┻━━━┛┻┓
//┃　　　　　　　┃ 　
//┃　　　━　　　┃
//┃　┳┛　┗┳　┃
//┃　　　　　　　┃
//┃　　　┻　　　┃
//┃　　　　　　　┃
//┗━┓　　　┏━┛
//┃　　　┃   神兽保佑　　　　　　　　
//┃　　　┃   代码无BUG！
//┃　　　┗━━━┓
//┃　　　　　　　┣┓
//┃　　　　　　　┏┛
//┗┓┓┏━┳┓┏┛
//  ┃┫┫　┃┫┫
//  ┗┻┛　┗┻┛

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

  private static final int LOGING = 0;//登录的flag
  private static final int REGISTER = 1;//注册的flag
  private static final int REGISTER_TWO = 2;//注册第二步的flag
  private static final int FORGET = 3;//忘记密码的flag
  private static final int FORGET_TWO = 4;//忘记密码第二步的flag
  private int type = LOGING;//默认是登录

  private EditText phone_input;//手机号
  private EditText mima; //密码
  private Button login;//提交
  private TextView wangji;//忘记密码
  private ImageView showHide;//密码是否显示
  private TextView denglu;//登录文字
  private TextView zhuce;//注册文字

  private boolean isShowPaw;//是否显示密码
  private TextView yanzhengma;//验证码
  private ImageView suo;//图标锁
  private ImageView denglujiantou;//登录下面的三角
  private ImageView zhucejiantou;//注册下面的三角
  private TextView kankan;//随便看看
  private RelativeLayout relativeLayout;//背景图
  private TextView wangji_tv;//忘记密码的文字 在背景图上
  private ImageView wangji_sanjiao;//忘记密码的三角
  private ImageView xian;//背景图的束线
  private ImageView fanhui;//忘记密码页面的返回按钮
  private TextView chenggong;//注册成功的提示

  /**
   * 验证手机号长度
   */
  public static boolean checkPhone(String phoneNumber) {
    if (phoneNumber.length() == 11) {
      return true;
    }
    return false;
  }

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //初始化控件
    init();
    //初始化监听
    initListener();
  }

  private void initListener() {
    login.setOnClickListener(this);
    denglu.setOnClickListener(this);
    zhuce.setOnClickListener(this);
    showHide.setOnClickListener(this);
    yanzhengma.setOnClickListener(this);
    kankan.setOnClickListener(this);
    wangji.setOnClickListener(this);
    fanhui.setOnClickListener(this);
  }

  private void init() {
    phone_input = (EditText) findViewById(R.id.phone_input);
    mima = (EditText) findViewById(R.id.mima);
    login = (Button) findViewById(R.id.login);
    wangji = (TextView) findViewById(R.id.wangji);
    showHide = (ImageView) findViewById(R.id.buxianshi);
    denglu = (TextView) findViewById(R.id.denglu);
    zhuce = (TextView) findViewById(R.id.zhuce);

    yanzhengma = (TextView) findViewById(R.id.yanzhengma);
    suo = (ImageView) findViewById(R.id.suo);
    denglujiantou = (ImageView) findViewById(R.id.denglujiantou);
    zhucejiantou = (ImageView) findViewById(R.id.zhucejiantou);
    kankan = (TextView) findViewById(R.id.kankan);

    relativeLayout = (RelativeLayout) findViewById(R.id.re1);

    wangji_tv = (TextView) findViewById(R.id.wangji_tv);
    wangji_sanjiao = (ImageView) findViewById(R.id.wangji_sanjiao);
    xian = (ImageView) findViewById(R.id.xian);
    fanhui = (ImageView) findViewById(R.id.fanhui);

    chenggong = (TextView) findViewById(R.id.chengGong);
  }

  @Override public void onClick(View v) {
    int id = v.getId();
    switch (id) {
      case R.id.login://提交的button 有多种可能,分别判断

        switch (type) {
          case LOGING:
            //登录按钮,做登录操作
            userLogin();
            break;
          case REGISTER:
            //注册流程
            userRegister();
            break;
          case REGISTER_TWO:
            //注册流程第二步
            userRegisterTwo();
            break;
          case FORGET:
            //忘记密码流程
            forgetPassword();
            break;
          case FORGET_TWO:
            //修改密码
            updatePassword();
            break;
        }

        break;
      case R.id.buxianshi://是否显示密码 ******* 或者 123456
        setShowHideImage();
        break;
      case R.id.denglu://显示登录页面
        showLogin();
        //设置flag
        type = LOGING;
        break;
      case R.id.zhuce://显示注册页面
        showZhuce();
        type = REGISTER;
        break;
      case R.id.yanzhengma://验证码
        //10000 是总时间   1000是间隔时间   yanzhengma  是要显示的文本框
        MyCount myCount = new MyCount(10000, 1000, yanzhengma);
        //启动 ||如果要取消 使用 myCount.cancel();
        myCount.start();
        //设置验证码不可点击
        yanzhengma.setClickable(false);
        break;
      case R.id.kankan://随便看看,应该是不登录,直接跳转到主页面

        break;
      case R.id.wangji://显示忘记密码页面
        //忘记密码的流程 输入手机号 --> 获取验证码 --> 设置新密码 --> 提交服务器 -->登录
        //显示忘记密码的视图
        showWangJi();
        type = FORGET;
        break;
      case R.id.fanhui://点击返回按钮 返回到主页
        showLogin();
        //设置flag
        type = LOGING;
        break;
    }
  }

  /**
   * 注册的第二步
   */
  private void userRegisterTwo() {
    String phoneNum = phone_input.getText().toString().trim();
    String updatePassword = mima.getText().toString().trim();

    //手机号和密码的非空和长度判断
    if (judgeEditText(phoneNum, updatePassword)) return;

    // TODO 这里拿着手机号和输入的密码,去请求网络,成功后直接登录....
  }

  /**
   * 修改密码
   */
  private void updatePassword() {
    String phoneNum = phone_input.getText().toString().trim();
    String updatePassword = mima.getText().toString().trim();

    //手机号和密码的非空和长度判断
    if (judgeEditText(phoneNum, updatePassword)) return;
    //TODO 这里拿着手机号和新的密码去请求.然后登陆.....

  }

  /**
   * 忘记密码
   */
  private void forgetPassword() {
    String phoneNum = phone_input.getText().toString().trim();
    String yanzheng = mima.getText().toString().trim();

    //手机号和密码的非空和长度判断
    if (judgeEditText(phoneNum, yanzheng)) return;

    //TODO 这里去做忘记密码的操作,提交手机号和验证码,进入下一步,这里只是模拟网络请求
    if (phoneNum.equals("17310160556") && yanzheng.equals("1")) {//TODO 这里只有服务器返回成功后,才能进入第二部
      Toast.makeText(MainActivity.this, "可以进入下一步", Toast.LENGTH_SHORT).show();
      type = FORGET_TWO;
      //切换 第二步的视图
      showForgetTwoView();
    } else {
      Toast.makeText(MainActivity.this, "不可以进入下一步", Toast.LENGTH_SHORT).show();
    }
  }

  /**
   * 显示忘记密码第二部的视图
   */
  private void showForgetTwoView() {
    mima.setText("");
    yanzhengma.setVisibility(View.GONE);
    showHide.setVisibility(View.VISIBLE);
    suo.setVisibility(View.VISIBLE);

    mima.setTransformationMethod(new PasswordTransformationMethod());

    mima.setHint("请输入新密码");
    login.setText("确认并登陆");
  }

  /**
   * 显示忘记密码页面
   */
  private void showWangJi() {
    clearEditText();
    suo.setVisibility(View.GONE);
    showHide.setVisibility(View.GONE);
    wangji.setVisibility(View.GONE);
    denglu.setVisibility(View.GONE);
    denglujiantou.setVisibility(View.GONE);
    zhuce.setVisibility(View.GONE);
    xian.setVisibility(View.GONE);

    wangji_tv.setVisibility(View.VISIBLE);
    wangji_sanjiao.setVisibility(View.VISIBLE);
    yanzhengma.setVisibility(View.VISIBLE);
    fanhui.setVisibility(View.VISIBLE);

    login.setText("找回密码");

    relativeLayout.setBackground(getResources().getDrawable(R.drawable.wangjimima2_bg));
    mima.setTransformationMethod(null);
  }

  /**
   * 用户注册
   */
  private void userRegister() {
    String phoneNum = phone_input.getText().toString().trim();
    String yanzheng = mima.getText().toString().trim();

    if (judgeEditText(phoneNum, yanzheng)) return;

    // TODO 这里拿到手机号和验证码,去请求服务器 也是根据接口去做下一步处理
    if (phoneNum.equals("17310160556") && yanzheng.equals("5986")) {
      Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
      //如果服务器返回成功,然后进行下一步,设置用户密码
      showRegisterTwoView();
      type = REGISTER_TWO;
    } else {
      Toast.makeText(MainActivity.this, "注册失败", Toast.LENGTH_SHORT).show();
    }
  }

  /**
   * 显示注册第二步的视图
   */
  private void showRegisterTwoView() {
    yanzhengma.setVisibility(View.GONE);
    showHide.setVisibility(View.VISIBLE);
    suo.setVisibility(View.VISIBLE);
    chenggong.setVisibility(View.VISIBLE);
    mima.setText("");
    mima.setHint("请设置密码");
  }

  /**
   * 显示登录页面
   */
  private void showLogin() {
    clearEditText();
    if (type == FORGET || type == FORGET_TWO) {
      denglu.setVisibility(View.VISIBLE);
      wangji_sanjiao.setVisibility(View.GONE);
      wangji_tv.setVisibility(View.GONE);
      xian.setVisibility(View.VISIBLE);
      zhuce.setVisibility(View.VISIBLE);
    }
    kankan.setVisibility(View.GONE);
    yanzhengma.setVisibility(View.GONE);
    zhucejiantou.setVisibility(View.GONE);

    suo.setVisibility(View.VISIBLE);
    wangji.setVisibility(View.VISIBLE);
    showHide.setVisibility(View.VISIBLE);
    denglujiantou.setVisibility(View.VISIBLE);

    login.setText("登录");
    mima.setHint("请输入密码");

    relativeLayout.setBackground(getResources().getDrawable(R.drawable.denglu1_bg));
  }

  /**
   * 清空两个输入框的内容 如果有需要,再修改
   */
  private void clearEditText() {
    phone_input.setText("");
    mima.setText("");
  }

  /**
   * 显示注册页面
   */
  private void showZhuce() {
    clearEditText();
    denglujiantou.setVisibility(View.GONE);
    zhucejiantou.setVisibility(View.VISIBLE);
    suo.setVisibility(View.GONE);
    wangji.setVisibility(View.GONE);
    kankan.setVisibility(View.VISIBLE);
    yanzhengma.setVisibility(View.VISIBLE);
    showHide.setVisibility(View.GONE);
    relativeLayout.setBackground(getResources().getDrawable(R.drawable.zhuce2_bg));
    login.setText("一键注册");
    mima.setHint("请输入验证码");
    mima.setTransformationMethod(null);
  }

  /**
   * 是否显示密码
   */
  private void setShowHideImage() {
    if (isShowPaw) {
      showHide.setImageResource(R.drawable.buxianshi_bg);
      isShowPaw = false;
      //设置输入框不显示
      mima.setTransformationMethod(new PasswordTransformationMethod());
    } else {
      showHide.setImageResource(R.drawable.xianshi2_bg);
      isShowPaw = true;
      //显示
      mima.setTransformationMethod(null);
    }
  }

  /**
   * 登录操作,
   */
  private void userLogin() {
    String phoneNum = phone_input.getText().toString().trim();
    String password = mima.getText().toString().trim();

    //手机号和密码的非空和长度判断
    if (judgeEditText(phoneNum, password)) return;

    // TODO 做登录操作,请求网络,解析返回的数据,根据接口再做下一步操作
    if (phoneNum.equals("17310160556") && password.equals("123456789")) {
      Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
    } else {
      Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
    }
  }

  /**
   * 判断两个输入框 是否为空
   *
   * @param phoneNum 手机号
   * @param password 密码 或者 验证码 或者 新密码
   * @return true 为空 false不为空
   */
  public boolean judgeEditText(String phoneNum, String password) {
    if (TextUtils.isEmpty(phoneNum)) {
      Toast.makeText(MainActivity.this, "手机号码不能为空", Toast.LENGTH_SHORT).show();
      return true;
    }
    if (TextUtils.isEmpty(password)) {
      if (type == LOGING) {
        Toast.makeText(MainActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();
      } else if (type == REGISTER) {
        Toast.makeText(MainActivity.this, "验证码不能为空", Toast.LENGTH_SHORT).show();
      } else if (type == FORGET) {
        Toast.makeText(MainActivity.this, "新密码不能为空", Toast.LENGTH_SHORT).show();
      }
      return true;
    }
    if (!checkPhone(phoneNum)) {
      // TODO: 你可以问下是你判断手机号,还是传给后台判断 这里只判断了手机号长度,
      // TODO 我们是后台判断的
      Toast.makeText(MainActivity.this, "手机长度不正确,请仔细查看", Toast.LENGTH_SHORT).show();
      return true;
    }
    return false;
  }

  /**
   * 倒计时,如果不行,你可以用hander.这里我只是为了方便 ,你看看效果 应该没问题
   */
  class MyCount extends CountDownTimer {

    private final TextView text;

    MyCount(long millisInFuture, long countDownInterval, TextView textView) {
      super(millisInFuture, countDownInterval);
      this.text = textView;
    }

    @Override public void onFinish() {
      text.setText("获取验证码");
      yanzhengma.setClickable(true);
      mima.setText("5986");
    }

    @Override public void onTick(long millisUntilFinished) {
      text.setText("" + millisUntilFinished / 1000);
    }
  }

  @Override public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
      if (type == FORGET || type == FORGET_TWO) {
        showLogin();
        //设置flag
        type = LOGING;
        return true;
      }
    }
    return super.onKeyDown(keyCode, event);
  }
}
